Many current products and services can be customized by a user/customer before being purchased. For example, computer systems typically include many possible options and configurations that can be specifically selected or configured by the customer. Other examples of highly configurable products and services include telephone switching systems, airplanes, automobiles, mobile telephone services, insurance policies, and computer software.
Product and service providers typically provide a “product configurator” that allows a customer or sales engineer to interact with a computer in order to customize and configure a solution by selecting among optional choices. Some known product configurators are constraint based. For these configurators, constraints are enforced between optional choices, allowing the user to select the choices they want, while validating that the resulting set of user choices is valid.
When configuring a system, a user must typically choose a list of one or more components. Each component may then be associated with another component/structure. The association may be done by the user or may automatically be done by the configurator. For example, when configuring a computer system, a computer rack may be chosen that includes slots, and a computer card may be chosen. The computer card should be placed in one of the slots, and therefore will be associated with one of the slots on the rack. In another example, when configuring an airplane, a fuselage may be chosen, and a particular seat may be chosen, and the seat will be associated with a certain seating portion of the fuselage.